package com.sp.tankgame04;

/**
 * 射击子弹
 *
 * 思路:
 * 1. 当发射一颗子弹后, 就相当于启动一个线程
 * 2. Hero有子弹的对象, 当按下J时, 我们就启动一个发射行为(线程), 让子弹不停的移动, 形成一个射击的效果
 * 3. 我们MyPanel需要不停的重绘子弹, 才能出现该效果
 * 4. 当子弹移动到面板边界时, 就应该销毁(把启动的子弹线程销毁)
 */
public class Shot implements Runnable{

    int x;//横坐标
    int y;//纵坐标
    int direct = 0;//子弹方向
    int speed = 2;//子弹速度
    boolean isLive = true;//子弹是否存活

    //构造器
    public Shot(int x, int y, int direct) {
        this.x = x;
        this.y = y;
        this.direct = direct;
    }

    @Override
    public void run() {//射击
        while (true) {
            //子弹休眠 50毫秒
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //根据方向来改变x, y 坐标
            switch (direct) {
                case 0://上
                    y -= speed;
                    break;
                case 1://右
                    x += speed;
                    break;
                case 2://下
                    y += speed;
                    break;
                case 3://左
                    x -= speed;
                    break;
            }

            //这里输出x,y坐标测试
            System.out.println("子弹" + Thread.currentThread().getName() + " x = " + x + ", y = " +y);
            //当子弹移动到面板的边界时, 就应该销毁(把启动的子弹线程销毁)
            //挡子弹碰到敌人坦克时, 也应该结束线程
            if (!(x >= 0 && x <= 1000 && y >= 0 && y <=750 && isLive)){
                System.out.println("子弹线程退出");
                isLive = false;
                break;
            }
        }
    }
}
